STRINGIFY(
	typedef struct float5
	{
		float x;
		float y;
		float w;
		float velX;
		float velY;
	} float5;

	float betrag(float a)
	{
		if (a < 0)
			return -a;
		return a;
	}
	void kernel NBody(global float5* inOut, global const int* n_)
	 {
		 int n = n_[0];
		 int i = get_global_id(0)+n_[1];

		 if (i == 0)
			 return;

		float entfernungX;
		float entfernungY;
		float entfernung;

		float verhaltnisX;
		float verhaltnisY;

		int richtungX;
		int richtungY;

		for (int j = 0; j < n; j++)
		{
			if (j == i)
				continue;

			entfernungX = inOut[i].x - inOut[j].x;
			entfernungY = inOut[i].y - inOut[j].y;

			richtungX = 1;
			richtungY = 1;

			if (entfernungX < 0)
			{
				richtungX = -richtungX;
				entfernungX = -entfernungX;
			}

			if (entfernungY < 0)
			{
				richtungY = -richtungY;
				entfernungY = -entfernungY;
			}

			verhaltnisX = (entfernungX - inOut[i].w) / (betrag(entfernungX - inOut[i].w) + betrag(entfernungY - inOut[i].w) + 1);
			verhaltnisY = (entfernungY - inOut[i].w) / (betrag(entfernungX - inOut[i].w) + betrag(entfernungY - inOut[i].w) + 1);

			entfernung = sqrt(entfernungX*entfernungX + entfernungY*entfernungY);


			inOut[i].velX -= (inOut[j].w / (entfernung*inOut[i].w)) * verhaltnisX * richtungX;
			inOut[i].velY -= (inOut[j].w / (entfernung*inOut[i].w)) * verhaltnisY * richtungY;


		}
		inOut[i].x += inOut[i].velX;
		inOut[i].y += inOut[i].velY;
	}
)